package com.changgou.order.task;

import com.alibaba.fastjson.JSON;
import com.changgou.order.config.RabbitMQConfig;
import com.changgou.order.dao.TaskMapper;
import com.changgou.order.pojo.Task;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;

import java.util.Date;
import java.util.List;

@Component
public class QueryTaskPoint {

    @Autowired
    private TaskMapper taskMapper;

    @Autowired
    private RabbitTemplate rabbitTemplate;
    /**
     * cron表达式
     *      一共有6到7位组成,以空格进行区分
     *          秒
     *          分
     *          时
     *          天
     *          月
     *          周
     *          年
     *      通常使用6位cron表达式即可,第七位基本上不用.
     *
     *      例如:
     *          每秒钟执行一次,每秒钟触发一次
     *              * * * * * ?
     *              1,3,5,7,9 * * * * ? 每分钟的1,3,5,7,9秒各触发一次
     *              0/5 * * * * ? 每隔5秒钟,触发一次.
     *              0-10 * * * * ? 每分钟的0秒到10秒之间各触发一次
     */
    //每两秒钟,检查一次数据库,查询当前的任务
    @Scheduled(cron = "0/2 * * * * ?")
    public void queryTask(){
        // TODO 3 每两秒钟,检查一次数据库,查询当前的任务
        //查询任务,tb_task,查询小于等于当前时间的任务.(即将要执行的任务)
        List<Task> taskList = taskMapper.findTaskLessThenCurrentTime(new Date());
//        System.out.println(taskList);
        if(!CollectionUtils.isEmpty(taskList)){
            //将任务发送到消息队列中
            for (Task task : taskList) {
                //参数1,交换机名称
                //参数2,路由key
                //参数3,发送的数据
                // TODO 4 发送数据到消息队列中,新增积分的消息队列
                rabbitTemplate.convertAndSend(
                        RabbitMQConfig.EX_BUYING_ADDPOINTUSER,
                        RabbitMQConfig.CG_BUYING_ADDPOINT_KEY,
                        JSON.toJSONString(task)
                );
            }
        }
    }

}
